reset: Don't enforce parent commits
authorColin Walters <walters@verbum.org>
Wed, 8 Apr 2015 00:54:37 +0000 (20:54 -0400)
committerColin Walters <walters@verbum.org>
Wed, 15 Apr 2015 11:12:20 +0000 (07:12 -0400)
First, git doesn't do this, and whatever Linus thinks is right or
something.

Second specifically to OSTree, it's quite common to not have
intermediate commits.  If one wants to reset a ref in order to prune
data after a deployment, the parentage check will fail.

Closes: https://github.com/GNOME/ostree/pull/87
Makefile-tests.am
src/ostree/ot-builtin-reset.c
tests/test-reset-nonlinear.sh [new file with mode: 0755]

index f9c0f512edad252958f1262ac0b394d120fb59cb..46bf4996c62ec2ada781d178ea41f4d2ad1cb360 100644 (file)
@@ -46,6 +46,7 @@ testfiles = test-basic \
        test-admin-instutil-set-kargs \
        test-admin-upgrade-not-backwards \
        test-repo-checkout-subpath      \
+       test-reset-nonlinear \
        test-setuid \
        test-delta \
        test-xattrs \
index a09e9a4fb2f687ec892a1c013db0395893f25a5c..71655438b088795137cd61c1ff48e36ecfe65a34 100644 (file)
@@ -49,38 +49,6 @@ find_current_ref (OstreeRepo   *repo,
   return ret;
 }
 
-static gboolean
-check_revision_is_parent (OstreeRepo   *repo,
-                          const char   *descendant,
-                          const char   *ancestor,
-                          GCancellable *cancellable,
-                          GError      **error)
-{
-  gs_free char *parent = NULL;
-  gs_unref_variant GVariant *variant = NULL;
-  gboolean ret = FALSE;
-
-  if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT,
-                                 descendant, &variant, error))
-    goto out;
-
-  parent = ostree_commit_get_parent (variant);
-  if (!parent)
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
-                   "The ref does not have this commit as an ancestor: %s", ancestor);
-      goto out;
-    }
-
-  if (!g_str_equal (parent, ancestor) &&
-      !check_revision_is_parent (repo, parent, ancestor, cancellable, error))
-    goto out;
-
-  ret = TRUE;
-out:
-  return ret;
-}
-
 gboolean
 ostree_builtin_reset (int           argc,
                       char        **argv,
@@ -118,9 +86,6 @@ ostree_builtin_reset (int           argc,
   if (current == NULL)
     goto out;
 
-  if (!check_revision_is_parent (repo, current, checksum, cancellable, error))
-    goto out;
-
   if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error))
     goto out;
 
diff --git a/tests/test-reset-nonlinear.sh b/tests/test-reset-nonlinear.sh
new file mode 100755 (executable)
index 0000000..1d0f8de
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright (C) 2015 Colin Walters <walters@verbum.org>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -e
+
+echo "1..1"
+
+. $(dirname $0)/libtest.sh
+
+setup_test_repository "archive-z2"
+cd ${test_tmpdir}/files
+$OSTREE commit -b testx -s "Another Commit"
+cd ${test_tmpdir}
+$OSTREE reset test2 testx
+
+echo "ok reset nonlinear"